/**
 * Copyright 2013-2018 the original author or authors from the JHipster project.
 *
 * This file is part of the JHipster project, see https://www.jhipster.tech/
 * for more information.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

const tabtab = require('tabtab')({
    name: 'jhipster'
});

module.exports.init = (program, binName) => {
    // This method should not log anything to console as it will be shown in completion
    // Needed to avoid unknown command trigger, should be hidden
    program
        .command('completion')
        .description('Print command completion script')
        .action(opts => {});
    // General handler. Gets called on `jhipster <tab>` and `jhipster stuff ... <tab>`
    const commands = program.commands.map(d => d._name);
    const opts = program.options.map(d => d.long);
    const optShort = program.options.map(d => d.short);
    const allOpts = [].concat(commands, optShort, opts).filter(d => d !== undefined);

    tabtab.on(binName, (data, done) => done(null, allOpts));
    tabtab.start();
};
